
import { _decorator, Component, Color, gfx, Vec3, Mesh, MeshRenderer, utils } from 'cc';
const { ccclass, property, executeInEditMode } = _decorator;

@ccclass('DynamicCreateMesh')
@executeInEditMode
export class DynamicCreateMesh extends Component {

    lighten : number = 0;
    lightenDirection : number = 0;
    c1 : Color = new Color();
    c2 : Color = new Color();
    _mesh !: Mesh;

    start () {
        this.lighten = 0;
        this.lightenDirection = 1;
 
        // var vfmtPosColor = new gfx.VertexFormat([
        //     { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 3 },
        //     { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },
        // ]);
        
        let mesh = new Mesh();

        // mesh.reset(
        //     {
        //         struct : {
        //             minPosition : new Vec3(-100, -100, -100),
        //             maxPosition : new Vec3(100, 100, 100),
        //             primitives : [
        //                 {
        //                     vertexBundelIndices : [
        //                         0, 1, 2, 1, 3, 2, // front
        //                         0, 6, 4, 0, 2, 6, // top
        //                         2, 7, 6, 2, 3, 7, // right
        //                         0, 5, 4, 0, 1, 5, // left
        //                         1, 7, 5, 1, 3, 7, // bottm,
        //                         4, 5, 6, 5, 7, 6, // back
        //                     ],
        //                     primitiveMode : gfx.PrimitiveMode.LINE_LIST,

        //                 }
        //             ],
        //             vertexBundles : [
        //                 {
        //                     attributes: [
        //                         { 
        //                             location : 
        //                         }
        //                     ]
        //                 }
        //             ]
        //         } 

        //     }
        // )


        // mesh.init(vfmtPosColor, 8, true);
        this._mesh = mesh;
        
        // mesh.setVertices(gfx.ATTR_POSITION, [
        //     new Vec3(-100, 100, 100), new Vec3(-100, -100, 100), new Vec3(100, 100, 100), new Vec3(100, -100, 100),
        //     new Vec3(-100, 100, -100), new Vec3(-100, -100, -100), new Vec3(100, 100, -100), new Vec3(100, -100, -100)
        // ]);

        let box : any;
        utils.createMesh(box);
 
        // mesh._minPos = new Vec3(-100, -100, -100);
        // mesh._maxPos = new Vec3(100, 100, 100);
 
        this.updateColor(Color.RED, Color.BLUE);
 
        // mesh.setIndices([
        //     0, 1, 2, 1, 3, 2, // front
        //     0, 6, 4, 0, 2, 6, // top
        //     2, 7, 6, 2, 3, 7, // right
        //     0, 5, 4, 0, 1, 5, // left
        //     1, 7, 5, 1, 3, 7, // bottm,
        //     4, 5, 6, 5, 7, 6, // back
        // ]);
 
        let renderer = this.node.getComponent(MeshRenderer);
        if (!renderer) {
            renderer = this.node.addComponent(MeshRenderer);
        }
        renderer.mesh = mesh;
    }

    updateColor (c1: Color, c2: Color) {
        // this.mesh.setVertices(gfx.ATTR_COLOR, [
        //     c1, c1, c1, c1,
        //     c2, c2, c2, c2,
        // ]);
    }

    update (dt: number) {

    }
}

